perm filename LILPC.SAI[1,ALS] blob
sn#001074 filedate 1972-06-23 generic text, type T, neo UTF8
00010 BEGIN "LISTEN"
00020 DEFINE ⊂="COMMENT"; ⊂ 5/30/72;
00030 ⊂ This is a fast version of LIS.SAI;
00040
00060 REQUIRE "COMSUB.HDR[SYS,ALS]" SOURCE_FILE;
00070
00080 REQUIRE "PRELPC[1,ALS]" LOAD_MODULE;
00085 REQUIRE "LPC2[SYS,THO]" LOAD_MODULE;
00090 REQUIRE "SIG[1,ALS]" LOAD_MODULE;
00100 FORTRAN REAL PROCEDURE SQRT(REAL X);
00110 FORTRAN REAL PROCEDURE ALOG10(REAL X);
00120 FORTRAN REAL PROCEDURE COS(REAL X);
00130 FORTRAN REAL PROCEDURE SIN(REAL X);
00160 INTEGER DPPOINT,DPP1,DPP2,DATSHIFT;
00170
00180 EXTERNAL PROCEDURE PREPARE;
00190 EXTERNAL FORTRAN PROCEDURE SIG(REFERENCE INTEGER P);
00195 EXTERNAL FORTRAN PROCEDURE LPC1(REFERENCE REAL A,B,R0,C;REFERENCE INTEGER N,I,J);
00200 EXTERNAL PROCEDURE TIMSET;
00210 EXTERNAL REAL PROCEDURE RUNTIM;
00220 EXTERNAL STRING PROCEDURE INCHWL;
00230
00240 DEFINE BPS="12";
00250 DEFINE DATSIZ="1280",BUFEXS="43",BUFSIZ="1323",TABSIZ="7400",LISSIZ="1000",INSIZ="24";
00260 DEFINE BYTE="((ILDB(BPT) LSH 24)%2↑24)";
00270 DEFINE LBYT="ILDB(LBPT)";
00280 DEFINE LBYTE="((ILDB(LBPT) LSH 24)%2↑24)";
00290 DEFINE TBLSIZ="250";
00300
00310 STRING FILEL,FILI,TFILEI,TFILE,FILEI,OPT0,OPT1,OPT2,OPT3;
00320 INTERNAL INTEGER ARRAY DATBUF[0:BUFSIZ];
00330 INTERNAL INTEGER ARRAY TABLES[0:TABSIZ];
00340 INTERNAL INTEGER ARRAY PHLIST,HLIST[00:63];
00350 INTERNAL INTEGER ARRAY LIST[0:LISSIZ];
00360 INTERNAL INTEGER ARRAY FLIST[0:35];
00370 INTEGER ARRAY LFILE[0:'177];
00380 INTERNAL REAL ARRAY A,B,C[0:256];
00390 REAL X,SX;
00400 REAL ARRAY WINDOW[0:256];
00410 INTERNAL INTEGER ARRAY INNAM[0:INSIZ];
00420 INTERNAL INTEGER ARRAY INCNT,INSUB,INDIV,INRAW,INDAT[0:INSIZ];
00430 INTEGER CHAN1,CHAN2,CHAN3,CHAN4,CHAN5,CHAN6,EOF,IEOF,EOFA,BRK;
00440 INTEGER BPT,BPTFST,BPTSAV,LBPT,SEGCNT,SEGTOT;
00450 INTEGER H,I,J,K,L;
00460 INTERNAL INTEGER M,N,P,RATE,STEPS,INFLAG,FLAG;
00470 INTERNAL INTEGER SEGC,SEGMRK,SEGSAV;
00480 INTERNAL INTEGER INTOT,PONY,HINT,UPCNT,TEACH;
00490 INTERNAL INTEGER I1L,I1H,I2L,I2H,I3L,I3H, INL,INH,NZRNG, FP1L,FP1H,FP2L,FP2H,
00500 ILPB,ILPC, IHPB,IHPC ;
00510 INTERNAL INTEGER NF; ⊂ *** USED IN PREPARE;
00520 INTERNAL INTEGER ARRAY TABLET[0:TBLSIZ];
00530 INTERNAL INTEGER TFLAG;
00540 INTERNAL INTEGER ZEROF,ZEROC;
00542 INTERNAL REAL R0 ;
00543 INTERNAL INTEGER NP,NZ,FP1,FP2,FZ ; INTERNAL REAL NPA,NZA,FP1A,FP2A,FZA, LPE,HPE,AVE ;
00544 INTERNAL INTEGER ARRAY FF[1:5] ; INTERNAL REAL ARRAY AMP[1:5] ;
00560 LABEL START;
00580 STRING READ1,READ2,PREHINT,STEPX,STPMOD;
00590 INTEGER HINCNT,HCOUNT,HINDEX;
00600
00900
00920 COMMENT MACROS;
00930 DEFINE ⊂="COMMENT",CR="'15",LF="'12",TB="'11";
00940 DEFINE CRLF="CR&LF", CRLF0="CR&'177&'21"; ⊂ FOR CRLF W/O FORM FEED;
00950 DEFINE TTY="'14",DSK="'13",BDSKO="'12",DPY="'11",BDSKI="'10",TMP="'0";
00960 DEFINE TIL="STEP 1 UNTIL";
00970 DEFINE BDSK="'10",GPH="'11",DSKO="GPH",HP="'7",HPLIST="'6",MUS="'4",ED="'3";
00980 INTEGER K.,J.; ⊂ USED IN MACROS;
00990 DEFINE ERROR(I)="OUT(TTY,""ERROR""&CVS(I))";
01000 DEFINE ISQRT(I)="(K.←(I)↑0.5)";
01010 DEFINE ODD(I)="((I) MOD 2)", EVEN(I)="¬ODD(I)";
01020 DEFINE ABS(I)="(IF I<0 THEN -I ELSE I)";
01030 DEFINE NONNEG(I)="(IF I<0 THEN 0 ELSE I)";
01040 DEFINE TRACE(N)="OUTSTR(""[""&CVS(N)&""]""(";
01050 DEFINE LTRACE(N)="OUTSTR(CR&LF&""[""&CVS(N)&""]"")";
01060 DEFINE FTRACE(N)=
01070 "BEGIN INTEGER F1,F2; GETFORMAT(F1,F2); SETFORMAT(0,7);
01080 OUTSTR(""[""&CVF(N)&""]""); SETFORMAT(F1,F2) END";
01090 DEFINE DATE="DATIME(""DATE"")", TIME="DATIME(""TIME"")";
01100 DEFINE MOVEADR(ADR,ARRAY)="QUICK_CODE MOVE 11,ARRAY;MOVEM 11,ADR;END";
01110 DEFINE PI="3.141592653",PICON="(PI/180)";
01120 DEFINE INFINITY="'377777777777";
01130 STRING PARMS; ⊂ HOLDS CONTENTS OF PARMFILE;
01140
01150 INTERNAL PROCEDURE SETBR;
01160 BEGIN
01170 SETBREAK(1,CR,LF,"IN");
01180 SETBREAK(2,CR&",",LF&TB&" ","IN");
01190 SETBREAK(3,NULL,NULL,"IN");
01200 SETBREAK(4,CR&TB&" ",LF&",","IN");
01210 SETBREAK(5,CR,LF,"ISP"); ⊂ SKIP CR&LF, KEEP LINE NBR AND TAB;
01220 SETBREAK(6,CR&TB&" ",LF&".,","IN");
01230 SETBREAK(7,NULL,0,"I"); ⊂ TO REMOVE NULL CHARACTERS FROM STRING;
01240 SETBREAK(8, "=←;[("&CR , LF&" ])" , "IN");
01250 SETBREAK(9,NULL,0&" "&CR&LF&TB,"IN"); ⊂ READS ENTIRE FILE, OMITTING LINE
01260 NUMBERS, NULLS, BLANKS, CR`S, LF`S, TB`S;
01270 SETBREAK(10," "&TB&CR,"0123456789"&LF,"IN");
01280 SETBREAK(11,NULL,0,"IN"); ⊂ READS ENTIRE FILE, OMITTING LINE NUMBERS,
01290 AND NULLS;
01300 END "SETBR";
01310
01320
01330 INTERNAL PROCEDURE LOOKIN(INTEGER CHAN; REFERENCE STRING FILENAME);
01340 BEGIN ⊂ REQUIRES SETBREAK(1,CR,LF,"IN");
01350 BOOLEAN NF;
01360 LOOKUP(CHAN,FILENAME,NF);
01370 WHILE NF DO
01380 BEGIN
01390 OUTSTR(CR&LF&"Can't find "&FILENAME&". File=");
01400 FILENAME ← INPUT(TTY,1);
01410 LOOKUP(CHAN,FILENAME,NF)
01420 END;
01430 END "LOOKIN";
01440
01450 STRING PROCEDURE HEADER;
01460 BEGIN STRING H1,H2; INTEGER I,J,K;
01470 IF HCOUNT>0 THEN BEGIN HCOUNT←HCOUNT-1; RETURN(PREHINT) END
01480 ELSE WHILE HCOUNT=0 DO BEGIN "XX"
01490 I←LFILE[HINDEX]; K←LDB(POINT(7,I,30)); J←SEGC-K;
01500
01510 IF I=0 THEN BEGIN PREHINT←""; HCOUNT←99; RETURN(PREHINT) END;
01520 IF J ≥ 0 THEN BEGIN "LATCH"
01530 H1←CVXSTR(LDB(POINT(12,I,11)) LSH 24);
01540 H2←CVXSTR(LDB(POINT(12,I,23)) LSH 24);
01550 IF EQU(H1,H2) THEN BEGIN PREHINT←H1; HCOUNT←LDB(POINT(5,I,35));
01560 HCOUNT←HCOUNT-J;
01570 HINDEX←HINDEX+1; RETURN(PREHINT); DONE
01580 END
01590 ELSE BEGIN PREHINT←""; HCOUNT←LDB(POINT(5,I,35));
01600 HCOUNT←HCOUNT-J; HINDEX←HINDEX+1; RETURN(PREHINT); DONE;
01610 END;
01620 END "LATCH";
01630 PREHINT←""; RETURN(PREHINT); END "XX";
01640 END "HEADER";
01650
00010 SETBR;
00020 UPCNT←3;
00030 FILEL←"LIST1";
00040 FILEI←"TOO1.DAT[1,THO]"; OPT1←"N"; OPT2←"N"; OPT3←"0"; M←8; INFLAG←0;
00050 CHAN1←1; CHAN2←2; CHAN3←3; CHAN4←4; CHAN5←5; CHAN6←6;
00060 CLOSE(CHAN1);
00070 OPEN(CHAN1,"DSK",'10,10,0,0,0,EOF);
00080 LOOKUP(CHAN1,"TABLES.DAT",0);
00090 ARRYIN(CHAN1,INSUB[0],INSIZ);
00100 ARRYIN(CHAN1,INDIV[0],INSIZ);
00110 ARRYIN(CHAN1,INCNT[0],INSIZ);
00120 ARRYIN(CHAN1,INNAM[0],INSIZ);
00130 ARRYIN(CHAN1,FLIST[0],36);
00140 ARRYIN(CHAN1,PHLIST[0],64);
00150 ARRYIN(CHAN1,HLIST[0],64);
00160 ARRYIN(CHAN1,TABLES[0],TABSIZ);
00170 ARRYIN(CHAN1,TABLET[0],TBLSIZ);
00180
00190 CLOSE(CHAN5); CLOSE(CHAN6);
00200 OPEN(CHAN5,"DSK",'10,10,0,0,0,EOF);
00210 LOOKUP(CHAN5,"SIGLST.DAT",0);
00220 ARRYIN(CHAN5,LIST[0],LISSIZ);
00230 INTOT←WORDIN(CHAN5);
00240 RELEASE(CHAN5);
00250
00260 IF (TFILEI←STRIN("Data file list("&FILEL&") = "))≠"" THEN FILEL←TFILEI;
00270 CLOSE(CHAN5); OPEN(CHAN5,"DSK",1,2,0,30,BRK,EOFA);
00280 LOOKUP(CHAN5,FILEL,1); EOFA←0;
00290
00300 M←8;
00310 N←2↑M; NF←2*N;
00320 FOR I←0 STEP 1 UNTIL N DO
00330 WINDOW[I]←(1-COS((2*PI*I)/N))/2;
00340
00350 N←2↑M;
00360 STPMOD←STRIN(CRLF&"Should HINTS be listed on scope? (Y or CR) = ");
00370 OUTSTR(CRLF&"Shift DATABUF by WORDS = ");
00380 DATSHIFT←CVD(INCHWL); ⊂ USE TO TEST PHASE SENSITIVITY OF LEARNING;
00390 OUTSTR(CRLF);
00400
00410 START:
00420 WHILE EOFA=0 DO BEGIN "LISTREAD"
00430 HINDEX←21; HCOUNT←HINCNT←0; OPT1←"Y"; OPT2←"N"; STEPX←"Y";
00440 FILEI←INPUT(CHAN5,1);
00450 IF EOFA≠0 THEN BEGIN
00460
00470 CLOSE(CHAN2);
00480 OPEN(CHAN2,"DSK",'10,0,10,0,0,0);
00490 ENTER(CHAN2,"TABLES.SAV",0);
00500 ARRYOUT(CHAN2,INSUB[0],INSIZ);
00510 ARRYOUT(CHAN2,INDIV[0],INSIZ);
00520 ARRYOUT(CHAN2,INCNT[0],INSIZ);
00530 ARRYOUT(CHAN2,INNAM[0],INSIZ);
00540 ARRYOUT(CHAN2,FLIST[0],36);
00550 ARRYOUT(CHAN2,PHLIST[0],64);
00560 ARRYOUT(CHAN2,HLIST[0],64);
00570 ARRYOUT(CHAN2,TABLES[0],TABSIZ);
00580 ARRYOUT(CHAN2,TABLET[0],TBLSIZ);
00590 CLOSE(CHAN2);
00600 OUTSTR("Tables have been saved as TABLES.SAV"&CRLF);
00610
00620 CLOSE(CHAN5); OPEN(CHAN5,"DSK",1,2,0,30,BRK,EOFA);
00630 LOOKUP(CHAN5,FILEL,1); EOFA←0;
00640
00650 DATSHIFT←DATSHIFT+1; OUTSTR("DATSHIFT now set to "&CVS(DATSHIFT)&CRLF);
00660 DONE;
00670 END;
00680
00690 CLOSE(CHAN4);
00700 OPEN(CHAN4,"DSK",'10,10,0,0,0,EOF);
00710 LOOKIN(CHAN4,FILEI);
00720 ARRYIN(CHAN4,LFILE[0],'200); ⊂ Input header;
00730 EOF←0; SEGC←0; SEGCNT←0;
00740 SEGTOT←(LFILE[0]*6)%N; RATE←LFILE[2];
00750
00760 IF RATE=0 THEN RATE←CVD(STRIN("Sampling rate missing. Rate = "));
00770 OUTSTR("Data file "&FILEI&" with "&CVS(SEGTOT)&" half segments"&CRLF);
00780 ⊂ **** SET PARAMETER RANGES
00790 THE PARA LIMITS ARE (DOUBLE CHECK) F1=200/800 F2=700/2050 F3=2000/3200
00800 NP=800/1500 NZRNG=NP+/-500 ?
00810 FP1=1800/3200 FP2=3200/5000 LPE=300/450 HPE=2500/3000 ;
00820 ⊂ *** I2H CHANGED FROM 28 TO 26 ESCAPE HI AMP F3 ;
00830 SX←RATE/N; I1L←200./SX ; I1H←800./SX+.5 ; I2L←700./SX; I2H←2050./SX+.5;
00840 I3L←1950./SX; I3H←3250./SX+.5;
00850 INL←800./SX; INH←1500./SX+.5; NZRNG←500./SX+.5;
00860 FP1L←1800./SX; FP1H←3200./SX; FP2L←3200./SX+.5; FP2H←5000./SX+.5;
00870 ILPB←300./SX; ILPC←450./SX; IHPC←2500./SX; IHPB←3000./SX;
00880 BPTFST←POINT(BPS,DATBUF[0],-1);
00890 IF DATSHIFT>0 THEN
00900 ARRYIN(CHAN4,DATBUF[0],DATSHIFT);
00910 ARRYIN(CHAN4,DATBUF[0],BUFEXS);
00920 SEGMRK←SEGC←K←1;
00930 WHILE EOF=0 DO
00940 BEGIN
00950 IF SEGC>SEGTOT THEN DONE;
00960 ARRYIN(CHAN4,DATBUF[BUFEXS],DATSIZ);
00970
00980 IF EOF≠0 THEN
00990 BEGIN
01000 J←EOF LAND '777777;
01010 FOR I←J STEP 1 UNTIL N-1 DO DATBUF[I]←0;
01020 END;
01030 IF SEGMRK<SEGC+30 THEN BEGIN "FOUND"
01040 K←1;
01050
01060 BPT←BPTFST; SEGSAV←SEGC;
01070 WHILE K≤6*DATSIZ%N DO BEGIN
01080 IF (J←SEGMRK-SEGC)>0 THEN BEGIN
01090 FOR I←1 STEP 1 UNTIL J DO BEGIN
01100 BPT←BPTSAV+42; L←ILDB(BPT); L←ILDB(BPT); BPTSAV←BPT; END;
01110 K←K+J; SEGC←SEGMRK; END;
01120 IF SEGC>SEGTOT THEN DONE;
01130 IF K>6*DATSIZ%N THEN DONE;
01140
01150 BPTSAV←BPT;
01160
01170 I←0; WHILE I≥0 DO BEGIN
01180 READ1←HEADER; IF STPMOD="Y" THEN OUTSTR(" ("&CVS(SEGC)&")"&READ1);
01190 IF READ1="" THEN BEGIN SEGMRK←SEGC+1; DONE END;
01200 J←CVSIX(READ1);
01210 FOR I←0 STEP 1 UNTIL 63 DO BEGIN
01220 IF PHLIST[I]=0 THEN BEGIN SEGMRK←SEGC+1;OUTSTR("Hint not identified for segment "&CVS(SEGC)&CRLF);DONE END;
01230 IF PHLIST[I]=J THEN BEGIN
01240 HINT←H←I;TABLES[2]←HLIST[I] ; DONE ; END;
01250 END;
01260 IF I<64 THEN BEGIN SEGMRK←SEGC+1; DONE END;
01270 END;
01280 IF READ1≠"" THEN BEGIN
01290 HINCNT←HINCNT+1;
01300 J←I←ZEROC←0; A[J]←BYTE*WINDOW[I]; B[J]←BYTE*WINDOW[I+1]; J←J+1;
01310 IF B[J]<A[J] THEN ZEROF←0 ELSE ZEROF←1;
01320 FOR I←2 STEP 2 UNTIL N-1 DO
01330 BEGIN
01340 A[J]←BYTE*WINDOW[I];
01350 IF A[J]<B[J-1] THEN ZEROF←0 ELSE IF ZEROF=0 THEN BEGIN ZEROF←1; ZEROC←ZEROC+1; END;
01360 B[J]←BYTE*WINDOW[I+1];
01370 IF B[J]<A[J] THEN ZEROF←0 ELSE IF ZEROF=0 THEN BEGIN ZEROF←1; ZEROC←ZEROC+1; END;
01380 J←J+1;
01390 END;
01395 I←24; J←N%2; LPC1(A[0],B[0],R0,C[0],N,I,J);
01430 END; ⊂ End of first IF READ1="" ;
01440 IF READ1≠"" THEN BEGIN
01450 PREPARE;
01460
01470 SIG(P);
01480 END; ⊂ END of second IF READ1≠"" ;
01490 IF SEGMRK>SEGSAV+6*DATSIZ%N THEN DONE;
01500 END; ⊂ End of WHILE K≤ ;
01510 END "FOUND";
01520 SEGC←SEGSAV+6*DATSIZ%N; K←1;
01530 FOR I←0 STEP 1 UNTIL BUFEXS-1 DO DATBUF[I]←DATBUF[I+DATSIZ];
01540 FOR I←BUFEXS STEP 1 UNTIL BUFSIZ-1 DO DATBUF[I]←0;
01550 END;
01560 CLOSE(CHAN1);
01570 OPEN(CHAN2,"DSK",'10,0,10,0,0,0);
01580 ENTER(CHAN2,"TABLES.DAT",0);
01590 ARRYOUT(CHAN2,INSUB[0],INSIZ);
01600 ARRYOUT(CHAN2,INDIV[0],INSIZ);
01610 ARRYOUT(CHAN2,INCNT[0],INSIZ);
01620 ARRYOUT(CHAN2,INNAM[0],INSIZ);
01630 ARRYOUT(CHAN2,FLIST[0],36);
01640 ARRYOUT(CHAN2,PHLIST[0],64);
01650 ARRYOUT(CHAN2,HLIST[0],64);
01660 ARRYOUT(CHAN2,TABLES[0],TABSIZ);
01670 ARRYOUT(CHAN2,TABLET[0],TBLSIZ);
01680 CLOSE(CHAN2);
01690 IF STPMOD="Y" THEN OUTSTR(CRLF);
01700 OUTSTR("Tables saved. "&CVS(HINCNT)&" hints found."&CRLF);
01710 IF EOFA≠0 THEN DONE;
01720 END "LISTREAD";
01730 GO TO START;
01740 END "LISTEN";